package com.itheima.d2_final;

public class FinalDemo1 {
    public static void main(String[] args) {
        // 目标：掌握final关键字的基本作用。

        //final 修饰类 ---> 不能被继承
        //final 修饰方法 ---> 方法不能被重写
        //final 修饰变量 ---> 只能赋值一次
        
        
        //局部变量被final修饰   只能赋值一次
        //一旦给final变量赋值后，之后就不能改变该值了
        final int age = 10;
//        age = 20; //报错：Cannot assign a value to final variable 'age'

        final int height;
        height = 180;
//        height = 185; //报错：Variable 'height' might already have been assigned to
    
        //引用类型变量final变量
        final int[] score = new int[88];
//        score = new int[100]; //报错：Cannot assign a value to final variable 'score'
        //final修饰的引用类型变量，地址不能变，但是地址对应的空间内容可以变化。String数据除外，String内容一旦定义后就不能变
        System.out.println("score[0] = " + score[0]); //0
        score[0] = 100;
        System.out.println("score[0] = " + score[0]); // 100
    }
}

/*
//String就是一个final类，不能写子类去继承
class MyString extends String{ 

}
*/

class Animal{
    public void eat() {
        System.out.println("动物吃东西");
    }

    public final void sleep() {
        System.out.println("动物睡觉");
    }
}

class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫猫在吃鱼");
        sleep(); //子类中可以使用父类中的final方法
    }
    
    /*
    //final方法不能被重写
    public void sleep(){ //报错：'sleep()' cannot override 'sleep()' in 'com.itheima.d2_final.Animal'; overridden method is final
        
    }
    */
}

